<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>react体验</title>
  <!-- 引入react库文件 -->
  <!-- react核心库文件，生成虚拟dom和提供相关react操作的api方法 -->
  <script src="./js/react.js"></script>
  <!-- 把虚拟dom转为真实对应的应用端真实dom -->
  <script src="./js/react-dom.js"></script>
  <!-- 引入babel库文件，jsx转为js -->
  <script src="./js/babel.js"></script>

  <style>
    .red {
      color: red;
      font-size: 18px;
    }
  </style>
</head>

<body>
  <!-- 挂载点 -->
  <div id="root"></div>

  <script type="text/babel">
    // 声明的数据
    let state = {
      username: '张三',
      age: 22,
      title: '新闻标题'
    }
    let titleObj = { title: '新闻标题', a: 'aaa', b: 'bbb' }

    let outHtml = '<h3>你好React<h3>'

    const vnode = (
      <div>
        {/* 动态的属性绑定  语法： 把属性中的引号去除，换成单个花括号 */}
        <div title={state.title}>{state.username}</div>
        {/* jsx它就是js，里面的属性它就是props对象中的key和value */}
        <div {...titleObj}>{state.username}</div>
        {/* class属性，首先它的名称写成className，jsx它也是js，class在js中是定义类的关键词，不建议用 */}
        {/* jsx中的class定义方案没有像vue中哪么多，支持字符串 */}
        <div className="red">我是新闻标题</div>
        <div className={'red'}>我是新闻标题</div>
        {/* 要想实现vue中的class对象开关的方案，只能通过3目运算自已来完成 */}
        <div className={state.age >= 20 ? 'red' : ''}>我是新闻标题</div>
        {/* 表单项中有一个label标签，它有一个属性叫 for，在jsx中不能用，用htmlFor */}
        <div>
          <label htmlFor="username">
            账号：
            <input id="username" type="text" />
          </label>
        </div>
        {/* style内联样式，在jsx中只有一种写法，对象写法 */}
        <div style={{ color: 'blue' }}>我是新闻标题</div>

        {/* 表达式的方案，它会转译输出 */}
        <div>{outHtml}</div>
        {/* html解析输出 解析输出，会有xss安全问题，所以一定要注意，尽量少的去用 */}
        <div dangerouslySetInnerHTML={{ __html: outHtml }}></div>
      </div>
    )

    // 把对应转为真实的dom，挂载到页面的节点中
    ReactDOM.render(vnode, document.querySelector('#root'))
  </script>

</body>

</html>